#include "app_common.h"
#include "pthread.h"
#include "mqueue.h"

mqd_t mqid;
void *thread_func(void *arg)
{
    char buff[1026]; // 缓冲区的长度必须大于等于单个元素的大小
    ssize_t real_len;
    if ((real_len = mq_receive(mqid, buff, sizeof(buff), NULL)) == -1)
    {
        // log_fatal("mq_receive error");
        perror("mq_receive error");
    }
    log_info("receive %.*s", real_len, buff);
}

int main(int argc, char const *argv[])
{

    // 创建消息队列
    struct mq_attr attr;
    attr.mq_maxmsg = 10;    // 最大消息数
    attr.mq_msgsize = 1024; // 单个消息大小
    attr.mq_flags = 0;      // 阻塞模式读取消息
    attr.mq_curmsgs = 0;    // 当前消息数
    mqid = mq_open("/my_mq", O_CREAT | O_RDWR, 0666, &attr);

    pthread_t thread_id;
    pthread_create(&thread_id, NULL, thread_func, NULL);

    // 向消息队列写入数据
    char *msg = "hello";
    // 返回-1表示发送失败
    if (mq_send(mqid, msg, strlen(msg), 0) == -1)
    {
        // log_error("mq_send error");
        perror("mq_send error");
        return 0;
    }
    log_info("mq_send success");

    pthread_join(thread_id, NULL);
    // 关闭消息队列
    mq_close(mqid);
    // 删除消息队列
    mq_unlink("/my_mq");
    return 0;
}
